package com.eonmind.common.provider.entity.user;

import com.eonmind.common.contract.enums.DelEnum;
import com.eonmind.common.contract.enums.user.NoticeNotifyStatus;
import com.eonmind.common.contract.enums.user.NoticeTypeEnum;
import com.eonmind.common.contract.enums.user.UserNoticeStatus;
import com.eonmind.common.contract.timer.Timer;
import com.mongoplus.annotation.ID;
import com.mongoplus.annotation.collection.CollectionName;
import com.mongoplus.enums.IdTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.FieldNameConstants;

import java.util.ArrayList;
import java.util.List;

/**
 * 用户通知实体类
 */
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@CollectionName("userNotification")
@FieldNameConstants
public class UserNotification {

    /**
     * 主键ID
     */
    @ID(type = IdTypeEnum.AUTO)
    private Long id;

    /**
     * 通知方式类型
     * 0-站内信
     * 1-邮件
     * 2-短信
     */
    private Integer noticeNotifyType = NoticeTypeEnum.IN_SITE.getCode();

    /**
     * 通知类型ID(关联通知类型表)
     */
    private Long noticeTypeId;

    /**
     * 通知标题
     */
    private String noticeTitle;

    /**
     * 通知内容
     */
    private String noticeContent;

    /**
     * 通知标签列表
     */
    private List<NoticeTag> noticeTags = new ArrayList<>();

    /**
     * 接收用户ID
     */
    private Long userId;

    /**
     * 通知发送的状态，对于站内信无关，对邮件、短信等相关
     * 0-失败
     * 1-成功
     * 2-放弃投递
     */
    private Integer notifyStatus = NoticeNotifyStatus.SUCCESS.getCode();

    /**
     * 本条通知的状态
     * 0-未读
     * 1-已读
     */
    private Integer status = UserNoticeStatus.UN_READ.getCode();

    /**
     * 更新时间
     */
    private Long updateTime = Timer.currentTimestamp();

    /**
     * 创建时间
     */
    private Long createTime = Timer.currentTimestamp();

    /**
     * 是否删除
     * 0-未删除，1-已删除
     */
    private Integer del = DelEnum.UN_DEL.getCode();

    /**
     * 通知标签内部类
     */
    @Data
    public static class NoticeTag {
        /**
         * 标签名称
         */
        private String tagName = "";

        /**
         * 标签样式
         */
        private String tagStyle = "";
    }
}
